package utils

import (
	"io"
	"log"
	"os"
	"os/exec"
	"path/filepath"
	"time"
)

func init() {
	//不要启动这么快
	time.Sleep(time.Millisecond * 20)
}

//精确睡眠，当前时间到t时间范围 大于 指定的时间，不睡眠，否则睡眠剩下的时间
func Sleep(t *time.Time, ms int64) {
	msec := time.Duration(ms) * time.Millisecond
	s := time.Now().Sub(*t)
	if msec > s {
		msec -= s
		time.Sleep(msec)
	}
}

//显示窗口，Windows 下有效
func Show() (err error) {
	ShowWindow(true)
	return
}

//关闭窗口，Windows 下有效
func Hide() (err error) {
	ShowWindow(false)
	return
}

//重启进程
func Restart() (err error) {
	var cmd *exec.Cmd
	if len(os.Args) == 1 {
		cmd = exec.Command(os.Args[0])
	} else {
		cmd = exec.Command(os.Args[0], os.Args[1:]...)
	}
	err = cmd.Start()
	if err == nil {
		os.Exit(1)
	}
	return err
}

//延时重启
func DelayRestart(sec int64) {
	go func() {
		time.Sleep(time.Second * time.Duration(sec))
		err := Restart()
		log.Println("Restart:", err)
	}()
}

//移动文件
func Move(src, dest string) (err error) {
	dir := filepath.Dir(dest)
	os.MkdirAll(dir, 0775)

	fs, err := os.Open(src)
	if err != nil {
		return
	}
	fd, err := os.Create(dest)
	if err != nil {
		fs.Close()
		return
	}
	_, err = io.Copy(fd, fs)
	fs.Close()
	fd.Close()
	os.Remove(src)
	return
}
